package com.seleniti.enpareja.controller.model.integration.service;

import java.util.Date;

import org.ioc.commons.integration.common.RequestManager;
import org.ioc.commons.integration.service.Service;

import com.seleniti.enpareja.controller.model.integration.database.domain.Notification;
import com.seleniti.enpareja.controller.model.integration.database.domain.NotificationType;

public interface NotificationService extends Service {

	RequestManager<Void> notifyLoggedUserCouple(NotificationType notifType);

	RequestManager<Void> notifyLoggedUserCouple(NotificationType notifType, String extraInfo);

	RequestManager<Void> notifyLoggedUser(NotificationType notifType);

	RequestManager<Void> notifyLoggedUser(NotificationType notifType, String extraInfo);

	RequestManager<Void> notifyLoggedUserCouple(NotificationType notifType, Date when);

	RequestManager<Void> notifyLoggedUserCouple(NotificationType notifType, String extraInfo, Date when);

	RequestManager<Void> notifyLoggedUser(NotificationType notifType, Date when);

	RequestManager<Void> notifyLoggedUser(NotificationType notifType, String extraInfo, Date when);

	RequestManager<String> storeLoggedUserScheduledNotification(NotificationType notifType, String extraInfo,
			Date when, String elementId);

	RequestManager<Notification> find(String id);

	RequestManager<Notification> read(String id);

	RequestManager<Boolean> registerDeviceForLoggedUser(String registrationId);

	RequestManager<Void> unregisterDevice(String registrationId);

}
